﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Csharpzuoye
{
    public class MimicStack
    {
        //静态作业
        //自己实现一个模拟栈（MimicStack）类，入栈出栈数据均为int类型，包含如下功能：   压入数据top指针动  bottom不动  
        //1.出栈Pop()，弹出栈顶数据            //栈的作业会用到索引器里面构造函数确定长度
        //2.入栈Push()，可以一次性压入多个数据  当方法的参数是数组的时候，我们可以在数组类型前面加一个关键字params
        //3.出/入栈检查，
        //  1.)如果压入的数据已超过栈的深度（最大容量），提示“栈溢出”stack overflow
        //  2.)如果已弹出所有数据，提示“栈已空”The stack is empty

        //object和装箱拆箱
        //使用object改造数据结构栈（MimicStack），并在出栈时获得出栈元素

        private int[] arrays;
        private int top = 0;
        //public int maxspeed { get; set; }//栈的深度
        public MimicStack(int length)
        {
            arrays = new int[length];
        }
        //public object this[int index]
        //{
        //    get { return arrays[index]; }
        //    set { arrays[index] = value; }
        //}
        public bool Push(int element)//截断式编程
        {
            if (top > arrays.Length )
            {
                Console.WriteLine("stack overflow");
                return false;
            }
            else
            {
                arrays[top] = element;//元素放进栈顶指针指向的位置
                top++;
                return true;
            }
        }
        //public void Push(params int[] elements)//重载
        //{
        //    for (int i = 0; i < elements.Length; i++)
        //    {
        //        Push(elements[i]);
        //    }
        //}
        //public void Pop(out bool succeed)
        //{
        //    if (top ==0)
        //    {
        //        succeed = false;
        //        Console.WriteLine("The stack is empty");
        //    }
        //    else
        //    {
        //        top--;
        //        succeed = true;
        //        Console.WriteLine(arrays[top]);
               
        //    }
        //}
        public bool Pop()
        {
            if (top == 0)
            {
                Console.WriteLine("The stack is empty");
                return false;
            }
            else
            {
                top--;
                Console.WriteLine(arrays[top]);
                return true;
            }

        }
    }
}
                                        